01
zypeh.net

Learning, Language Design

Here comes the second issue of my blog post! I have started my university semester, and it is going to be week 2 soon. I found that time management is far more easier if you work / study at home, without those commutes and travelling. Working / Studying online makes the time management turned into stamina management. You just got to find a method or a schedule to let yourself focus on something.

Spaced repitition

Spaced repetition is one of the method I am attempting to practice. It is a technique for efficient memorization instead of attemping to memorize by 'cramming', memorization can be done far more efficient by instead spacing out each review, with increasing durations as one learns the item, with the scheduling done by software.

This is well suited for people who are balencing a job while studying for a degree. As you work on workday, you can revise previous courses at day night, and move on to new topic at weekends. This is however, need to have strong self-control and good system to review your learning. So I am trying to construct a system / schedule for my daily routine, and see if it works.

A Programming Language I am making

I have been developing a programming language for myself while learning compiler engineering. And now I found myself falling into the pit of type theory quickly.

The language I am developing is called Topos, it comes from the Greek that refers to a method for developing arguments, and now we refer it to the category that behaves like the presheaf sets on topological spaces. Personally, I prefer the first definition as it is more understanable, and a programming langues does help us to construct arguments in some certain extend.

The initial idea was making a programming language to empower user to learn how computers work, in a designed abstraction. By adding more code incrementally and giving more hints to the compiler, for example, type annotation and type level programming, could increase the verified portion of program. Potentially it will do type erasure and allow performant code generated.

In topos I wished to make writing proofs easily, by building patterns and constructs on rigid theory.

I hope this can also empower more and more programmers to keep an eye on the program safety, and even more, the mathematical foundations.

To accomplish this, the programming language we make shall allow newcomers to learn mathematical thinking gradually and reduce the costs of writing safe programs in real world.

The topos compiler and the language design would be exist without the prior work of others. During the development of topos compiler I had read many other projects and here I list down the notable feature of others.

Haskell

As far as I know, Scaba Hruska is working on whole program optimization and strict functional languages backend, GRIN compiler.

Sixty / Sixten
Idris / Idris 2
Setoidtt (previously setoidtt-proto)
Cyclone

Which also leads to the Rust's lifetime, another explicit region annotations for low level memory management strategies.

Rust
Reference